GMaps.prototype.createPanorama = function (streetview_options) {
    if (!streetview_options.hasOwnProperty('lat') || !streetview_options.hasOwnProperty('lng')) {
        streetview_options.lat = this.getCenter().lat();
        streetview_options.lng = this.getCenter().lng();
    }

    this.panorama = GMaps.createPanorama(streetview_options);

    this.map.setStreetView(this.panorama);

    return this.panorama;
};

GMaps.createPanorama = function (options) {
    var el = getElementById(options.el, options.context);

    options.position = new google.maps.LatLng(options.lat, options.lng);

    delete options.el;
    delete options.context;
    delete options.lat;
    delete options.lng;

    var streetview_events = ['closeclick', 'links_changed', 'pano_changed', 'position_changed', 'pov_changed', 'resize', 'visible_changed'],
        streetview_options = extend_object({visible: true}, options);

    for (var i = 0; i < streetview_events.length; i++) {
        delete streetview_options[streetview_events[i]];
    }

    var panorama = new google.maps.StreetViewPanorama(el, streetview_options);

    for (var i = 0; i < streetview_events.length; i++) {
        (function (object, name) {
            if (options[name]) {
                google.maps.event.addListener(object, name, function () {
                    options[name].apply(this);
                });
            }
        })(panorama, streetview_events[i]);
    }

    return panorama;
};
